﻿Public Class frm_Principal
    Dim nombre As String
    Dim aux_Hora_Ingreso As String = ""
    Dim aux_Fecha As Date
    Dim acceso As acceso_a_datos
    Dim cmd As New SqlClient.SqlCommand

    Public Property _nombre
        Get
            Return nombre
        End Get
        Set(ByVal value)
            nombre = value
        End Set
    End Property

    Dim turno As String

    Public Property _Turno
        Get
            Return turno
        End Get
        Set(ByVal value)
            turno = value
        End Set
    End Property

    Private Sub frm_Principal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        acceso = New acceso_a_datos()
        Me.valido_encargado()
        Me.tipo_turno()

        lbl_hola.Text = "Hola " + nombre

        lbl_turno.Text = "Turno: " + turno

        Me.compruebo_ingreso()
        Timer1.Start()
    End Sub

    'coloca el nombre del turno que corresponde
    Private Sub tipo_turno()
        Dim hora As String = Trim(Str(Now.Hour)) & ":" & Trim(Str(Now.Minute))
        Dim fecha As String = Now.Date
        Dim tabla As New Data.DataTable
        Dim consulta As String = ""
        Dim turno_ = turno
        acceso._tabla = "Turno"

        'aca se fija si el dia es sabado, sino pone el nombre del turno que corresponda
        If Now.DayOfWeek.ToString = "Saturday" Then
            _Turno = "Unico"
        Else
            consulta = "SELECT cod_Turno, nombre, hora_Hasta FROM Turno WHERE (hora_Desde<='" & hora & "'"
            consulta += " AND hora_Hasta>='" & hora & "' AND nombre NOT LIKE 'Unico')"
            tabla = acceso._consulta(consulta)

            If tabla.Rows.Count = 1 And Now.DayOfWeek.ToString <> "Sunday" Then
                _Turno = tabla.Rows(0)("nombre")
            Else
                _Turno = "Fuera de Turno"
            End If
        End If
    End Sub

    'BOTON INGRESAR
    Private Sub btn_ingreso_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_ingreso.Click
        Dim hora As String = Trim(Str(Now.Hour)) & ":" & Trim(Str(Now.Minute)) '& ":" & Trim(Str(Now.Second))
        Dim fecha As Date = Now.Date
        acceso._tabla = "Empleado"
        Dim tabla1 As New Data.DataTable
        Dim consulta As String = ""
        Dim usuario = nombre

        consulta = "SELECT tipo_Doc, numero_Doc FROM Empleado WHERE nombre_Usuario LIKE '" & usuario & "'"
        tabla1 = acceso._consulta(consulta)

        Try
            'acceso._tabla = "Horario"
            Dim sql As String = "INSERT INTO Horario (horario_Ingreso, fecha, tipo_Doc, numero_Doc) VALUES ('" & _
                hora & "','" & fecha & "','" & tabla1.Rows(0)("tipo_Doc") & "','" & tabla1.Rows(0)("numero_Doc") & "')"
            acceso._consulta(sql)

            aux_Hora_Ingreso = hora
            aux_Fecha = fecha

            Me.btn_ingreso.Enabled = False
            Me.btn_Egreso.Enabled = True

            frm_RegistroHorario.Show()

        Catch ex As Exception
            MsgBox(ex.Message)
            frm_RegistroError.Show()
        End Try
    End Sub

    'TIMER
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        lbl_hora.Text = Now.ToLongTimeString
        lbl_fecha.Text = Now.ToLongDateString
    End Sub

    'BOTON EGRESO
    Private Sub btn_Egreso_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Egreso.Click
        Dim hora As String = Trim(Str(Now.Hour)) & ":" & Trim(Str(Now.Minute)) '& ":" & Trim(Str(Now.Second))
        Dim fecha As Date = Now.Date
        acceso._tabla = "Empleado"
        Dim tabla As New Data.DataTable
        Dim consulta As String = ""
        Dim sql As String = ""
        Dim usuario As String = nombre


        consulta += "SELECT TOP 1 DATEPART (DAY,fecha) "
        consulta += "FROM Horario INNER JOIN Empleado ON Horario.numero_Doc = Empleado.numero_Doc "
        consulta += "AND Horario.tipo_Doc = Empleado.tipo_Doc "
        consulta += "WHERE (Empleado.nombre_Usuario = '" & nombre & "') "
        consulta += "ORDER BY cod_Horario DESC"

        tabla = acceso._consulta(consulta)

        If tabla.Rows(0).Item(0) = Now.Day Then
            Try
                sql += "UPDATE Horario "
                sql += "SET horario_Egreso='" & hora & "'"
                sql += "WHERE cod_Horario=" & Me.obtener_cod()
                acceso._consulta(sql)

                Me.btn_Egreso.Enabled = False
                Me.btn_ingreso.Enabled = True

                frm_RegistroEgreso.Show()
            Catch ex As Exception
                frm_RegistroError.Show()
            End Try
        Else
            Try
                consulta = "SELECT TOP 1 horario_Ingreso "
                consulta += "FROM Horario INNER JOIN Empleado ON Horario.numero_Doc = Empleado.numero_Doc "
                consulta += "AND Horario.tipo_Doc = Empleado.tipo_Doc "
                consulta += "WHERE (Empleado.nombre_Usuario = '" & nombre & "')"
                consulta += "ORDER BY cod_Horario DESC"

                tabla = acceso._consulta(consulta)

                sql += "UPDATE Horario "
                sql += "SET horario_Egreso=DATEADD (HOUR, 5, '" & tabla.Rows(0).Item(0) & "') "
                sql += "WHERE cod_Horario=" & Me.obtener_cod()

                acceso._consulta(sql)

                Me.btn_Egreso.Enabled = False
                Me.btn_ingreso.Enabled = True

                frm_RegistroEgreso.Show()
            Catch ex As Exception
                frm_RegistroError.Show()
            End Try
        End If
    End Sub

    'BOTON ENCARGADO
    Private Sub btn_encargado_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_encargado.Click
        Encargado._nombre = nombre
        Encargado.Show()
        Me.Hide()
    End Sub

    'BOTON CONSULTAR HORARIOS
    Private Sub btn_Consultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Consultar.Click
        Mis_Horarios._nombre = nombre
        Mis_Horarios.Show()
    End Sub

    'BOTON CONTRASEÑA
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_contraseña.Click
        UsuarioContraseña.Show()
    End Sub

    'BOTON CERRAR
    Private Sub btn_cerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_cerrar.Click
        Me.Close()
        lbl_hola.Text = ""
        frm_Acceso.Show()
        frm_Acceso.txt_usuario.Text = ""
        frm_Acceso.masktxt_contraseña.Text = ""
        frm_olvide_Constraseña.txt_usuario.Text = ""
        frm_olvide_Constraseña.txt_rta.Text = ""
        frm_Acceso.txt_usuario.Focus()
    End Sub

    'VALIDAMOS SI EL QUE ACCEDE ES EL ENCARGADO
    Private Sub valido_encargado()
        acceso._tabla = "Empleado"
        acceso._tabla = "Cargo_Empleado"
        Dim tabla As New Data.DataTable
        Dim consulta As String = ""
        Dim usuario As String = nombre

        consulta = "SELECT Cargo_Empleado.nombre as cargo from Empleado INNER JOIN Cargo_Empleado ON Empleado.cod_Cargo = Cargo_Empleado.cod_Cargo where nombre_Usuario LIKE '" & usuario & "'"
        tabla = acceso._consulta(consulta)

        If tabla.Rows(0)("cargo").Equals("Encargado") Then
            Me.btn_encargado.Enabled = True
            Me.btn_contraseña.Visible = False
        Else
            Me.btn_encargado.Enabled = False
        End If
    End Sub

    'OBTENER CODIGO
    Public Function obtener_cod() As Integer
        Dim consulta As String = ""
        Dim nombre_Usuario As String = nombre
        Dim tabla As Data.DataTable

        consulta = "SELECT MAX(Horario.cod_Horario) AS id "
        consulta += "FROM Horario INNER JOIN Empleado ON Horario.numero_Doc = Empleado.numero_Doc "
        consulta += "AND Horario.tipo_Doc = Empleado.tipo_Doc "
        consulta += "WHERE (Empleado.nombre_Usuario = '" & nombre_Usuario & "')"

        Try
            tabla = acceso._consulta(consulta)

            If tabla.Rows.Count = 1 Then
                Return tabla.Rows(0)("id")
            Else
                Return 0
            End If
        Catch ex As InvalidCastException
            MsgBox(ex.Message)
            Return 0
        End Try
    End Function

    'COMPROBAMOS EL INGRESO
    Private Sub compruebo_ingreso()
        Dim consulta As String = ""
        Dim nombre_Usuario As String = nombre
        Dim tabla As Data.DataTable

        consulta = "SELECT * FROM Horario "
        consulta += "INNER JOIN Empleado ON Horario.numero_Doc = Empleado.numero_Doc "
        consulta += "AND Horario.tipo_Doc = Empleado.tipo_Doc "
        consulta += "WHERE (Horario.cod_Horario = (SELECT MAX(Horario.cod_Horario) FROM Horario "
        consulta += "INNER JOIN Empleado ON Horario.numero_Doc = Empleado.numero_Doc "
        consulta += "AND Horario.tipo_Doc = Empleado.tipo_Doc "
        consulta += "WHERE (Empleado.nombre_Usuario = '" & nombre_Usuario & "')))"

        Try
            tabla = acceso._consulta(consulta)

            If tabla.Rows.Count = 0 Then
                Me.btn_ingreso.Enabled = True
                Me.btn_Egreso.Enabled = False
            Else
                If tabla.Rows(0)("horario_Egreso").ToString = "" Then
                    Me.btn_ingreso.Enabled = False
                    Me.btn_Egreso.Enabled = True
                Else
                    Me.btn_ingreso.Enabled = True
                    Me.btn_Egreso.Enabled = False
                End If
            End If
        Catch ex As InvalidCastException
            MsgBox(ex.Message)
        End Try
    End Sub

    'CIERRE DEL FORMULARIO CON LA CRUZ
    Private Sub frm_Principal_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        frm_Acceso.Show()
        frm_Acceso.txt_usuario.Text = ""
        frm_Acceso.masktxt_contraseña.Text = ""
        frm_Acceso.txt_usuario.Focus()
    End Sub

    Private Sub frm_Principal_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
        Dispose()
    End Sub
End Class
